﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//int main()
//{
//	//int a = 10;
//	//int* p = &a;
//	//*p = 20;
//	//printf("%d\n", a);
//
//	//int a = 10;
//	//int* p = &a;
//	//p = NULL;
//	//if (p != NULL)
//	//{
//	//	*p = 20;
//	//}
//	//printf("%d\n", a);
//
//	int* p;
//	if (p != NULL)
//	{
//		//....
//	}
//
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		*(p++) = i;
//	}
//	//此时p已经越界了，可以把p置为NULL
//	p = NULL;
//	//下次使用的时候，判断p不为NULL的时候再使用
//	p = &arr[0];
//	if (p != NULL)
//	{
//		//...
//	}
//	return 0;
//}


//#define NDEBUG
////定义后，assert（）断言失效
//#include<assert.h>
//int main()
//{
//	//int a = 10;
//	////int* p = &a;
//	////int* p;
//	//assert(p != NULL);
//	//*p = 20;
//	//printf("%d", a);
//
//	int a = 0;
//	printf("%d\n", a);
//	assert(a != 0);//err
//	printf("%d\n", a);
//	return 0;
//}


//#include<string.h>
//int main()
//{
//	char arr[] = "abcdef";
//	size_t len =strlen(arr);
//	printf("%zd", len);//size_t-->用%zd打印
//	return 0;
//}


//#include<assert.h>
//size_t my_strlen(const char* str)
//{
//	size_t count = 0;
//	assert(str != NULL);
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	size_t len = my_strlen(arr);//size_t是无符号整型
//	printf("%zd", len);//size_t-->用%zd打印
//	return 0;
//}

//交换两个数的值
//void Sawp(int* px, int* py)
//{
//	int tmp = 0;
//	tmp = *px;
//	*px = *py;
//	*py = tmp;
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a=%d b=%d\n", a, b);
//	Sawp(&a,&b);
//	printf("交换后：a=%d b=%d\n", a, b);
//	return 0;
//}


//sizeof(数组名)->表⽰整个数组 和 &数组名->取出的是整个数组的地址
//除此之外，任何地⽅使⽤数组名，数组名都表⽰⾸元素的地址。
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("&arr[0]   = %p\n", &arr[0]);// 00D3FB84
//	printf("&arr[0]+1 = %p\n", &arr[0]+1);//00D3FB88
//
//	printf("arr     = %p\n", arr);// 00D3FB84
//	printf("arr+1   = %p\n", arr+1);//00D3FB88
//
//	printf("&arr    = %p\n", &arr);//00D3FB84
//	printf("&arr+1  = %p\n", &arr + 1);//00D3FBAC
//	//00D3FBAC-00D3FB84 == 40
//
//	printf("%d\n", sizeof(arr));//40
//
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = arr;//int * p=&arr[0]
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		//printf("%d", *(p + i));
//		//pritnf("%d", p[i]);
//		//printf("%d", i[p]);
//		//printf("%d", arr[i]);
//		//printf("%d", *(arr+i));
//		//printf("%d", *(i+arr));
//		//printf("%d", i[arr]);
//	}
//	return 0;
//}

//void test(int arr[])
//{
//	int sz2 = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz2);//1(x86环境下）、2（x64环境下）
// //sizeof(arr) 计算的是⼀个地址的⼤⼩（单位字节）
// //⽽不是数组的⼤⼩（单位字节）
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz1 = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz1);//10
//	test(arr);
//	return 0;
//}

//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++) 
//	{
//		//一趟冒泡排序
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = 0;
//				tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//	}
//}
//

int main()
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	**pp = 20;
	printf("%d\n", a);
	
	return 0;
}
